<?php
/**
 * @category 	AnniversaryController.php
 * @author 		Sung Hoon, Cho (akdddnet@gmail.com)
 * @since		2011. 4. 1.
 * @license		BSD License
 * @version		0.1
 */


global $CFG;
require_once $CFG->FW_DIR."/mvc/Controller.php";
require_once $CFG->CLASSES_DIR."/".$CFG->PATH->ADMIN."/anniversary/AnniversaryEB.php";
require_once $CFG->WEBINF_DIR."/utility/AnniversaryUtil.php";

class AnniversaryController extends Controller {
	function __construct() {
		parent::__construct(get_class());	// 꼭 부모의 construct를 실행 해줘야됩니다.
	}
	
	function start() {
		global $CFG;
		
		$this->action = $CFG->PATH->WWW."/".$CFG->PATH->ADMIN."/".$this->module; 
		
		$this->tpl->assign(array(
			"action"=>$this->action
			,"module"=>$this->module
		));
	}
	
	function index() {

		$this->page->title = '기념일 관리';
		
		$dto = $this->dao->index(new DTO());
		
		$list = $dto->list;
		if($list) {
			foreach($list as $anni) {  
				$anni->solar = getIsSolar($anni->ay_is_solar);
				$anni->display = getDisplay($anni->ay_display);
				$anni->main = getMainString($anni->ay_main);
				$anni->date = date("Y-m-d", strtotime($anni->ay_date));
				$anni->solar_class = ($anni->ay_is_solar) ? "solar" : "lunar";
				$anni->name_class = ($anni->ay_main) ? "main" : "";
			}
		}
		$this->tpl->assign(array(
			"list"=>$list
		));
	}
	
	function view($seq) {
		if(is_numeric($seq)) {
			$dto = new DTO();
			$eb = new AnniversaryEB();
			$eb->ay_seq = $seq;
			$dto->eb = $eb;
			
			$result = $this->dao->view($dto)->obj;
			
			if(!Common::isNullOrEmpty($result)) {
				$result->date = date("Y-m-d", strtotime($result->ay_date));
				$result->display = getDisplay($result->ay_display);
				$result->solar = getIsSolar($result->ay_is_solar);
				$result->main = getMainString($result->ay_main);
				
				$result->sr_css = ($result->ay_is_solar) ? "solar" : "lunar";
				
				$ay_date_strtotime = strtotime($result->ay_date);
				$ay_date = date("Y-m-d", $ay_date_strtotime);
				$now = date("Y-m-d");
				
				// 향후 일정 리스트
				$result->future_schedule = new stdClass;
				$result->future_schedule->is = true;
				switch($result->ay_display) {
					default :
					case 0 :	// D-Day
						$result->days = "D ".DateUtil::getDateDiffFormat($ay_date, $now);
						break;
					case 1 :	// Add
						// 기준일 부터 지난일 구할때는 기준일에 -1일을 해줘야됨.
						$datetime = new DateTime($ay_date);
						$ay_date = $datetime->modify("-1 day")->format("Y-m-d");
						
						$result->days = DateUtil::getDateDiffFormat($ay_date, $now)."일"; 
						break;
					case 2 :	// 생일
						// 생일인 경우에는 향후 일정 리스트를 출력하지 않는다.
						$result->future_schedule->is = false;
						
						// 나이 및 태어난 해 부터 몇일 지났는지 확인하기 위한 변수
						$result->interval = DateUtil::getDateDiff($result->date, $now);
					
						$getdate = getdate();
					
						// 월,일만 가져오기
						$birth_mon_day = date("m-d", $ay_date_strtotime);
						
						// 금년도 생일.
						$birthday = $getdate["year"]."-".$birth_mon_day;

						// 음력일 경우 양력 일자로 가져오기
						if(!$result->ay_is_solar) {
							$birthday = $this->getLunarToSolar($birthday);
						}
						
						// 금년도 생일이 지났으면 birthday를 다음해 생일날로 변경
						if($now > $birthday) {
							$birthday = ($getdate["year"]+1)."-".$birth_mon_day;
							
							// 음력일 경우 양력일자로 가져오기
							if(!$result->ay_is_solar) {
								$birthday = $this->getLunarToSolar($birthday);	
							}
							
							// 한국식 나이로 따질려면 interval->y 에 +1을 해줘야됨.
							$result->age = $result->interval->y+1;
							$result->kor_age = $result->interval->y;
						} else {
							// 생일이 안지났으므로 +2
							$result->age = $result->interval->y+2;
							$result->kor_age = $result->interval->y;
						}
					
						$result->days = "D ".DateUtil::getDateDiffFormat($birthday, $now);
						break;
				}


				if($result->future_schedule->is) {
					// 향후 기념일은 100일 기준으로 출력 시킬 예정임..
					// 알고리즘이. round(days/100)*100 맞나 모르겠네??;
					$print_day = 100;
					
					$list = array();
					
					$num = 1;
					$i = 0;
					$interval = DateUtil::getDateDiff($ay_date, $now);
					
					while($num < 10) {						
						$datetime = new DateTime($ay_date);

						$days = round($interval->days/100)*$print_day+($print_day*$i);
						$add_day = $datetime->add(new DateInterval("P".$days."D"));
						
						
						$day_list = new stdClass;
						// 향후 기념일이 현재 시간보다 클 경우에만 list에 등록
						if($add_day->format("Y-m-d") >= $now) {
							if($days == 0)
								$day_list->name = "D-DAY";
							else
								$day_list->name = $days."일";
								
							$day_list->day = $add_day->format("Y년 m월 d일");
							array_push($list, $day_list);
							
							$num = count($list);
						}
						
						$i++;
					}
					
					$result->future_schedule->list = $list;
				}
				
				$this->tpl->assign(array(
					"result"=>$result	
				));	
			} else {
				Javascript::getAlertWithAjax("존재하지 않는 기념일 입니다.");	
			}
		} else {
			Javascript::getAlertWithAjax("잘못된 값이 전달되었습니다.");
		}
	}
	
	
	function add() {
		$this->page->class = $this->module.'_add';
		$this->page->class = '기념일 추가';
	}
	
	function doAdd() {
		$param = new Parameter(false);
		
		$module = $this->module;
		
		$validate = new Validate();
		$validate->add("required", $param->getParameter($module."_name"), "기념일 명");
		$validate->add(array("required", "number"), $param->getParameter($module."_is_solar"), "양/음력");
		$validate->add(array("required", "date"), $param->getParameter($module."_day"), "기념일");
		$validate->add(array("required", "number"), $param->getParameter($module."_display"), "계산방법");
		
		if($validate->validate()) {
			$dto = new DTO();
			
			$eb = new AnniversaryEB();
			$eb->ay_name = $param->getParameter($module."_name");
			$eb->ay_date = $param->getParameter($module."_day");
			$eb->ay_is_solar = $param->getParameter($module."_is_solar");
			$eb->ay_main = $param->getParameter($module."_main", 0);
			$eb->ay_display = $param->getParameter($module."_display");
			
			$dto->eb = $eb;
			$result = $this->dao->doAdd($dto)->rc;
			if($result > 0) {
				global $CFG;
				
				$message = "정상적으로 추가 되었습니다.";
				$return_url = $CFG->PATH->WWWADMIN."/".$this->module;
				
				if(Common::isAjax()) {
					Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
				} else {
					Javascript::getAlertMove($message, $return_url);
				}
			} else {
				Javascript::getAlertWithAjax("추가시 문제가 발생하였습니다.");
			}
		} else {
			Javascript::getAlertWithAjax($validate->getErrorMessage());
		}
	}
	
	function modify($seq) {
		// seq값은 숫자만 전달 받아야됨.
		if(is_numeric($seq)) {
			$dto = new DTO();
			$eb = new AnniversaryEB();
			$eb->ay_seq = $seq;
			$dto->eb = $eb;
			
			$result = $this->dao->view($dto)->obj;
			
			if(!Common::isNullOrEmpty($result)) {
				$this->page->class = $this->module.'_add';
				$this->page->title = $result->ay_name.' 기념일 수정';
				
				$result->date = date("Y-m-d", strtotime($result->ay_date));
				
				
				$script = Javascript::getjQueryValidateFile();
				$this->tpl->assign(array(
					"result"=>$result
					,"script"=>$script
					
				));	
			} else {
				Javascript::getAlertWithAjax("존재하지 않는 기념일 입니다.");	
			}
		} else {
			Javascript::getAlertWithAjax("잘못된 값이 전달되었습니다.");
		}
	}
	
	
	function doModify() {
		$param = new Parameter(false);
		
		$module = $this->module;
		
		$validate = new Validate();
		$validate->add(array("required", "number"), $param->getParameter("seq"), "기념일 번호");
		$validate->add("required", $param->getParameter($module."_name"), "기념일 명");
		$validate->add(array("required", "number"), $param->getParameter($module."_is_solar"), "양/음력");
		$validate->add(array("required", "date"), $param->getParameter($module."_day"), "기념일");
		$validate->add(array("required", "number"), $param->getParameter($module."_display"), "계산방법");
		
		if($validate->validate()) {
			$dto = new DTO();
			
			$eb = new AnniversaryEB();
			$eb->ay_seq = $param->getParameter("seq");
			$eb->ay_name = $param->getParameter($module."_name");
			$eb->ay_date = $param->getParameter($module."_day");
			$eb->ay_is_solar = $param->getParameter($module."_is_solar");
			$eb->ay_main = $param->getParameter($module."_main", 0);
			$eb->ay_display = $param->getParameter($module."_display");
			
			$dto->eb = $eb;
			$result = $this->dao->doModify($dto)->rc;
			
			
			global $CFG;
			
			$message = "정상적으로 수정 되었습니다.";
			$return_url = $CFG->PATH->WWWADMIN."/".$this->module."/view/".$eb->ay_seq;
			
			if(Common::isAjax()) {
				Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
			} else {
				Javascript::getAlertMove($message, $return_url);
			}
			
		} else {
			Javascript::getAlertWithAjax($validate->getErrorMessage());
		}
	}
	
	function doDelete($seq) {
		
		if(is_numeric($seq)) {
			$dto = new DTO();
			$eb = new AnniversaryEB();
			$eb->ay_seq = $seq;
			
			$dto->eb = $eb;
			$result = $this->dao->doDelete($dto)->rc;
			if($result > 0) {
				global $CFG;
				
				$message = "삭제 되었습니다.";
				$return_url = $CFG->PATH->WWWADMIN."/".$this->module;
				
				if(Common::isAjax()) {
					Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
				} else {
					Javascript::getAlertMove($message, $return_url);
				}
				
			} else {
				Javascript::getAlertWithAjax("삭제시 문제가 발생하였습니다.");
			}
		} else {
			Javascript::getAlertWithAjax("잘못된 값이 전달되었습니다.");
		}
	}
	
	private function getLunarToSolar($solar_date) {
		$dto = new DTO();
		$dto->obj = date("Y/m/d", strtotime($solar_date));
		return date("Y-m-d", strtotime($this->dao->getLunarToSolar($dto)->obj->solar_date));
	}
	
} 